import axios from 'axios'
import { API_CONFIG, isDevelopment } from '@/config/env'

// 创建 axios 实例
const http = axios.create({
  baseURL: API_CONFIG.baseURL,
  timeout: API_CONFIG.timeout,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
http.interceptors.request.use(
  config => {
    // 添加 token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }

    return config
  },
  error => {
    console.error('❌ Request Error:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
http.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    // 错误处理
    const { response } = error

    // 统一错误处理
    if (response) {
      switch (response.status) {
        case 401:
          // 未授权，清除token并跳转到登录页
          console.error('未授权访问:', response.data?.message || 'Token无效')
          
          // 只有在非登录接口时才清除token和跳转
          if (!error.config?.url?.includes('/Auth/login')) {
            localStorage.removeItem('token')
            localStorage.removeItem('userInfo')
            localStorage.removeItem('userId')
            
            // 使用动态导入router来避免循环依赖
            import('@/router').then(({ default: router }) => {
              if (router.currentRoute.value.path !== '/login') {
                router.push('/login')
              }
            }).catch(err => {
              console.warn('Router导入失败，使用fallback跳转:', err)
              if (window.location.pathname !== '/login') {
                window.location.href = '/login'
              }
            })
          }
          break
        case 403:
          console.error('权限不足')
          break
        case 404:
          console.error('请求的资源不存在')
          break
        case 500:
          console.error('服务器内部错误')
          break
        default:
          console.error('请求失败:', response.data?.message || '未知错误')
      }
    } else {
      console.error('网络错误:', error.message)
    }

    return Promise.reject(error)
  }
)

export default http 